[IA64] Avoid recursively walking guest short VHPT
authorawilliam@xenbuild2.aw <awilliam@xenbuild2.aw>
Mon, 12 Feb 2007 16:54:20 +0000 (09:54 -0700)
committerawilliam@xenbuild2.aw <awilliam@xenbuild2.aw>
Mon, 12 Feb 2007 16:54:20 +0000 (09:54 -0700)
Signed-off-by: Anthony Xu <anthony.xu@intel.com>
xen/arch/ia64/vmx/vmx_process.c

index 308a4de0ba674466593f80ba84325935c3d8c916..be49be865358835dc5c8b83d1b22c48b991d0b60 100644 (file)
@@ -353,6 +353,18 @@ vmx_hpw_miss(u64 vadr , u64 vec, REGS* regs)
             }
         }
 
+        /* avoid recursively walking (short format) VHPT */
+        if ((((vadr ^ vpta.val) << 3) >> (vpta.size + 3)) == 0) {
+            if (vpsr.ic) {
+                vcpu_set_isr(v, misr.val);
+                dtlb_fault(v, vadr);
+                return IA64_FAULT;
+            } else {
+                nested_dtlb(v);
+                return IA64_FAULT;
+            }
+        }
+            
         vmx_vcpu_thash(v, vadr, &vhpt_adr);
         if (!guest_vhpt_lookup(vhpt_adr, &pteval)) {
             /* VHPT successfully read.  */